/**
 * 文件：CommentService.java
 * 作者：苏新阳
 * 完成度：完成
 * 最后修改日期：2023-7-2 01:22
 */
package com.gomokult.dao;

import com.gomokult.entity.Comment;
import com.gomokult.exception.InvalidIDException;
import com.gomokult.exception.NoSuchPageException;

import java.sql.Timestamp;
import java.util.List;

public interface CommentDAO{
    /**
     * 查询评论：根据评论ID查找返回评论实体
     * @param commentID 评论ID
     * @return 评论实体
     * @throws InvalidIDException 当评论ID无效或不存在时
     */
    Comment selectComment(int commentID) throws InvalidIDException;

    /**
     * 查找评论数目：根据对局id获取指定对局下的评论总数
     * @param gameID 对局ID
     * @return 评论总数
     * @throws InvalidIDException 当对局ID无效或不存在时
     */
    int selectCommentsCount(int gameID) throws InvalidIDException;

    /**
     * 获取指定对局下的评论页数(每页20条评论)
     * @param gameID 对局ID
     * @return 评论页数
     * @throws InvalidIDException 当对局ID无效或不存在时
     */
    int selectCommentPagesCount(int gameID) throws InvalidIDException;

    /**
     * 获取指定对局指定页的评论列表
     * @param gameID 对局ID
     * @param page 页码
     * @return 评论列表
     * @throws InvalidIDException 当ID无效或不存在时
     * @throws NoSuchPageException 当页码不存在时
     */
    List<Comment> selectCommentsFromPage(int gameID, int page) throws InvalidIDException, NoSuchPageException;

    /**
     * 删除指定评论
     * @param commentID 评论ID
     * @throws InvalidIDException 当ID无效或不存在时
     */
    void deleteComment(int commentID) throws InvalidIDException;

    /**
     * 清空指定对局的所有评论
     * @param gameID 对局ID
     * @throws InvalidIDException 当ID无效或不存在时
     */
    void clearComment(int gameID) throws InvalidIDException;

    /**
     * 发布评论，将评论存入
     * @param comment 评论实体
     */
    void insertComment(Comment comment);

    /**
     * 根据userid和gameid查找对局表中ID
     * @param userID 用户名ID
     * @param gameID 对局ID
     * @return commentID 返回评论ID
     */
    int selectCommentId(int userID, int gameID, Timestamp date);
}
